
package paneles;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

import entidades.Cliente;

import arreglos.ClienteArrayList;



import principal.Principal;
import util.Utilitarios;



public class PanelListadoClientes extends JPanel implements ActionListener {

	private static final long serialVersionUID = 1L;
	
	 private JTable tablaListadoClientes;
	    private JButton btnCerrar;
	    private JButton btnActualizar;
	    private JScrollPane scrollPaneTablaListadoClientes;
	    private final String[] nombreColumnas = {"Codigo",
	        "Nombre",
	        "Apellido Paterno",
	        "Apellido Materno",	
	        "DNI",	
	        "Email",	
	        "Telefono",
	        "Direccion",	        
	        "Fec.Nacimiento",
	        "Tarjeta Bonus",
	        "Puntos"};
	    private final int numeroColumnasTabla = 11;
	    private DefaultTableModel datos;
	    private JInternalFrame listadoClientesJInternalFrame;
	   
	    
	private Principal appletPrincipal; 
	private JInternalFrame ventanaListadoClientes;

    public PanelListadoClientes(Principal pAppletPrincipal, JInternalFrame pVentanaListatoClientes) {
        try {
            setLayout(null);

            this.appletPrincipal = pAppletPrincipal;
            this.ventanaListadoClientes = pVentanaListatoClientes;

     

            Object[][] listadoClientes = ObtenerListadoClientes();

            setLayout(new BorderLayout());
            datos = new DefaultTableModel(listadoClientes, nombreColumnas);
            tablaListadoClientes = new JTable(datos);
            tablaListadoClientes.setDragEnabled(true);

            tablaListadoClientes.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

            scrollPaneTablaListadoClientes = new JScrollPane(tablaListadoClientes);
            scrollPaneTablaListadoClientes.setBounds(10, 0, 870, 520);
            scrollPaneTablaListadoClientes.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollPaneTablaListadoClientes.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            
          

            TableColumn columnaCodigo = tablaListadoClientes.getColumnModel().getColumn(0);
            columnaCodigo.setPreferredWidth(60);

            TableColumn columnaNombre = tablaListadoClientes.getColumnModel().getColumn(1);
            columnaNombre.setPreferredWidth(150);

            TableColumn columnaApePaterno = tablaListadoClientes.getColumnModel().getColumn(2);
            columnaApePaterno.setPreferredWidth(150);

            TableColumn columnaApeMaterno = tablaListadoClientes.getColumnModel().getColumn(3);
            columnaApeMaterno.setPreferredWidth(150);

            TableColumn columnaDni = tablaListadoClientes.getColumnModel().getColumn(4);
            columnaDni.setPreferredWidth(100);
            
            TableColumn columnaEmail = tablaListadoClientes.getColumnModel().getColumn(5);
            columnaEmail.setPreferredWidth(100);

            TableColumn columnaTelefono = tablaListadoClientes.getColumnModel().getColumn(6);
            columnaTelefono.setPreferredWidth(100);

            TableColumn columnaDireccion = tablaListadoClientes.getColumnModel().getColumn(7);
            columnaDireccion.setPreferredWidth(150);           

            TableColumn columnaFecNac = tablaListadoClientes.getColumnModel().getColumn(8);
            columnaFecNac.setPreferredWidth(100);
            
            TableColumn columnaBonus = tablaListadoClientes.getColumnModel().getColumn(9);
            columnaBonus.setPreferredWidth(100);
            
            TableColumn columnaPtosBonus= tablaListadoClientes.getColumnModel().getColumn(10);
            columnaPtosBonus.setPreferredWidth(100);


            add(scrollPaneTablaListadoClientes);

            btnActualizar = new JButton("Actualizar");
            btnActualizar.setBounds(680, 525, 100, 30);
            btnActualizar.addActionListener(this);
            this.add(btnActualizar);

            btnCerrar = new JButton("Cerrar");
            btnCerrar.setBounds(790, 525, 90, 30);
            btnCerrar.addActionListener(this);
            this.add(btnCerrar);


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void actionPerformed(ActionEvent e) {
    	
    	 if (e.getSource() == btnCerrar) {

    		 appletPrincipal.ventanaListadoClientes.setVisible(false);
    		 appletPrincipal.ventanaListadoClientes = null;
         }

         if (e.getSource() == btnActualizar) {

             ActualizarDatosTabla();
         }
   
    }
    
    
   

    private void ActualizarDatosTabla() {
        Object[][] listadoClientes = ObtenerListadoClientes();
        DefaultTableModel nuevoDatos = new DefaultTableModel(listadoClientes, nombreColumnas);
        tablaListadoClientes.setModel(nuevoDatos);

        TableColumn columnaCodigo = tablaListadoClientes.getColumnModel().getColumn(0);
        columnaCodigo.setPreferredWidth(60);

        TableColumn columnaNombre = tablaListadoClientes.getColumnModel().getColumn(1);
        columnaNombre.setPreferredWidth(150);

        TableColumn columnaApePaterno = tablaListadoClientes.getColumnModel().getColumn(2);
        columnaApePaterno.setPreferredWidth(150);

        TableColumn columnaApeMaterno = tablaListadoClientes.getColumnModel().getColumn(3);
        columnaApeMaterno.setPreferredWidth(150);

        TableColumn columnaDni = tablaListadoClientes.getColumnModel().getColumn(4);
        columnaDni.setPreferredWidth(100);
        
        TableColumn columnaEmail = tablaListadoClientes.getColumnModel().getColumn(5);
        columnaEmail.setPreferredWidth(100);

        TableColumn columnaTelefono = tablaListadoClientes.getColumnModel().getColumn(6);
        columnaTelefono.setPreferredWidth(100);

        TableColumn columnaDireccion = tablaListadoClientes.getColumnModel().getColumn(7);
        columnaDireccion.setPreferredWidth(150);           

        TableColumn columnaFecNac = tablaListadoClientes.getColumnModel().getColumn(8);
        columnaFecNac.setPreferredWidth(100);
        
        TableColumn columnaBonus = tablaListadoClientes.getColumnModel().getColumn(9);
        columnaBonus.setPreferredWidth(100);
        
        TableColumn columnaPtosBonus= tablaListadoClientes.getColumnModel().getColumn(10);
        columnaPtosBonus.setPreferredWidth(100);
    }

    private Object[][] ObtenerListadoClientes() {
        ClienteArrayList arrayListClientes = null;
        ArrayList<Cliente> listadoClientes = null;
        int nummeroFilas = 0;
        int numColumnas = numeroColumnasTabla;
        int filaActual = 0;

        Object matrix[][] = null;
        try {
            arrayListClientes = new ClienteArrayList();
            listadoClientes = new ArrayList<Cliente>();
            listadoClientes = arrayListClientes.ListadoClientes();

            nummeroFilas = listadoClientes.size();

            matrix = new Object[nummeroFilas][numColumnas];

            for (Cliente cliente : listadoClientes) {
            
                matrix[filaActual][0] = cliente.getCodigo();
                matrix[filaActual][1] = cliente.getNombre();
                matrix[filaActual][2] = cliente.getApellidoPaterno();
                matrix[filaActual][3] = cliente.getApellidoMaterno();    
                matrix[filaActual][4] = cliente.getDni();  
                matrix[filaActual][5] = cliente.getEmail();  
                matrix[filaActual][6] = cliente.getTelefono();
                matrix[filaActual][7] = cliente.getDireccion();              
                matrix[filaActual][8] = Utilitarios.FormatearFechaParaListar(cliente.getFechaNacimiento());
                matrix[filaActual][9] = cliente.getNumTarjetaBonus(); 
                matrix[filaActual][10] = cliente.getPuntos(); 

                filaActual++;
            }


        } catch (Exception ex) {
        }
        return matrix;
    }
   
    
  
   


}
